package pluginInterfaces;

import java.io.Serializable;
import java.util.List;

import modelInterfaces.IEvent;
import modelInterfaces.IPrediction;
import modelInterfaces.ISubject;


/*
 * Interface for manage a plugins of recommendation algorithms. 
 */
public interface IPluginAlgorithm extends Serializable {
	
	/*
	 * Compute recommendations.
	 * @param currentUser target user to realize recommendations. 
	 * @param eventList list of events to consider in computation.
	 * @param itemAmountToRecommend number of items to recommend.
	 * @return list of computed predictions.
	 */
	public List<IPrediction> recommend(ISubject currentUser, List<IEvent> eventList, int itemAmountToRecommend);
	

	/*
	 * Returns name of recommendation algorithm plugin.
	 * @return name.
	 */
	public String toString();
	
}
